package com.dongrj.framework.core.utils;

import com.dongrj.framework.core.exception.Assert;
import com.github.benmanes.caffeine.cache.Cache;

import java.util.function.Function;

public final class CacheUtils {


    /**
     * 从缓存中获取数据(需要重写V的equal()和hashCode()方法)
     *
     * @param cache    缓存
     * @param k        数据Key
     * @param function 函数
     * @param defaultV 默认值
     */
    public static <K, V> V defaultIfNull(Cache<K, V> cache, K k, Function<K, V> function, V defaultV) {
        if (k == null) {
            return null;
        }
        Assert.nonNull(defaultV, "默认值不能为空!");
        V v = cache.get(k, function);
        if (v == null) {
            cache.put(k, defaultV);
            return null;
        }
        if (v.equals(defaultV)) {
            return null;
        }
        cache.put(k, defaultV);
        return v;
    }

}
